ums: pull_request_target is rejected by the App-token exchange - #1006
Conversation
Anthropic's exchange endpoint 401s on OIDC tokens minted for pull_request_target, so a review workflow on that trigger never reaches the model. The action's own side supports it, which is what makes the misconfiguration read as correct. Also separates the three 401s that share that step -- the trigger event, a non-collaborator triggering actor, and the workflow-validation skip that exits 0 -- and records a fourth distinct cause in the short-duration band fully-clean.md already warns not to read as a credential signature. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HMmB6db4xpbuqcqaQKArZb
|
Working on this --- paws off until I'm done. |
|
Claude finished review — View run No Review summary: #1006Scope: Adds one new section (~57 lines) to Extensive fact-checking performed: verified Two independent review passes (plus my own check) converged on the same two issues, both in the closing paragraph of the new section: Issues found
Nothing else rose to a blocking level — no hallucinated symbols/APIs (this is a prose-only memory file, no code), no CLAUDE.md structural violations (Do/Don't-pair convention doesn't clearly apply here, since this documents an infrastructure finding rather than a user-given correction, consistent with precedent elsewhere in the same file), and semantic-line-break/ASCII-punctuation formatting is clean. Since no VerdictNeeds minor changes — two citation/factual-precision issues (findings 1 and 2) should be fixed before merge; finding 3 is optional polish. |
Three findings from round 1, all correct: - The fully-clean.md reference put a paraphrase in quotation marks. Replaced with the section's real heading, verified verbatim, plus the point stated in my own words. - "on the same repository" was wrong: the three antecedent failures are two on ucd-serg.github.io and one on d-morrison/qwt. Named both, and said what they actually share. - "Two neighbouring 401s" introduced three bullets, the third of which is not a 401 at all. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HMmB6db4xpbuqcqaQKArZb
Round 1: three findings, all Addressed in
|
Code reviewReviewed this UMS memory-entry PR against the CLAUDE.md/ Almost everything checks out:
One finding, posted inline: the closing historical note's claim that PR VerdictNeeds minor changes — one inline finding (a likely-fabricated claim about a specific CI run) should be corrected or removed before merge; everything else in the entry is well-sourced and accurate. |
|
Claude finished review — View run Code reviewReviewed this UMS memory-entry PR against the CLAUDE.md/ Almost everything checks out:
One finding, posted inline: the closing historical note's claim that PR VerdictNeeds minor changes — one inline finding (a likely-fabricated claim about a specific CI run) should be corrected or removed before merge; everything else in the entry is well-sourced and accurate. |
Round 2 read run 30680266785's success conclusion and reported the sentence describing it as fabricated. The run did succeed and did stop at workflow validation -- the action skips and exits 0, which is what the third bullet of this same section says. Rebutted with the log, and reworded so the conclusion cannot be read as excluding an early exit: both runs are now named, the exit-0 is stated outright, and the misreading itself is recorded as a worked example of the bullet above. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HMmB6db4xpbuqcqaQKArZb
Code review (round 4, re-verifying round-3 rebuttal)This round re-checks the one open item from my prior review: the inline finding The author's rebuttal in
So my previous read (that this run "succeeded" and therefore could not have The two round-1 fixes ( No banned punctuation or multi-sentence added lines found in a fresh scan of VerdictReady for merge. |
|
Claude finished review — View run The review is posted. Summary: Verdict: Ready for merge I re-verified the one open item from my prior review round — the claim that PR #89's
That confirms the author's round-3 rebuttal ( I also re-checked the two round-1 fixes ( Note: I accidentally posted a throwaway test comment to the PR while checking write permissions, then immediately overwrote it with the real review via |
Ready for mergeRound 3 verdict is Ready for merge, with the round-2 inline finding withdrawn by the reviewer itself: it had read only the check-run conclusion and not the skip condition, and re-checking run 30680266785 confirmed both the Round-by-round:
All eight checks pass. One inline thread total, resolved. Head is Correcting myself once more, since it is in this thread. My round-2 reply closed by claiming the reviewer had checked Not merging --- yours to call. |
UMS entry from a
UCD-SERG/ucd-serg.github.iosession where every Claude reviewhad been failing for a day.
What it records
Anthropic's
github-app-token-exchangeendpoint rejects OIDC tokens minted forpull_request_target, so a review workflow on that trigger dies at401 Unauthorized - Invalid OIDC tokenbefore the model is reached. Upstreamanthropics/claude-code-action#713,
open since 2025-12-02.
The reason it is worth a corpus entry rather than a repo note: the action's own
side supports the trigger --- #347 is closed as completed and
docs/security.mdhas a section on it --- so the broken workflow reads as correct and documented,
and the failure names something (
Invalid OIDC token) that sounds like acredential problem.
It also separates the three different 401s that arrive at that same step, which
had not been written down together:
Invalid OIDC tokenUser does not have write access on this repositoryWorkflow validation failed ...That third one matters beyond this entry: a green
claude-reviewon any PR thatedits the review workflow is a skip, not a review.
Relationship to what is already there
This is a fourth distinct cause in the same short-duration band on the same
repository that
fully-clean.md's "short failures are not a signature" entryalready cites for three. Three of the four run 25 seconds or less and none is
about credentials, so it corroborates that rule rather than competing with it.
The workflow-validation skip is cross-referenced to the existing self-mod skip
bullet in the same file rather than restated.
One correction worth flagging
Issue #713's own body credits
pull_request_targetsupport to "PR #759".gh pr view 759does not resolve --- #759 is an unrelated open bug report abouta wrong bot ID constant. The entry cites #347 instead and says so, so the next
reader does not re-derive it.
Verification
scripts/check-memory-file-size.py: no file exceeds 1200 lines (this one is 998).Add a standalone resolve-pr-threads skill #347 closed/completed, ums: learnings from the serocalculator "Invalid Date" fix #713 open, Coding rule: use memoisation (
memoise::memoise()) when it helps #759 not a PR.Source PR: UCD-SERG/ucd-serg.github.io#89,
issue #88.